home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Src Code / ARROWCHA.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  6.8 KB  |  228 lines

  1. {**********************************************}
  2. {   TArrowSeries (derived from TPointSeries)   }
  3. {   Copyright (c) 1995-1996 by David Berneda   }
  4. {**********************************************}
  5. unit ArrowCha;
  6.  
  7. interface
  8.  
  9. { This unit shows how a new Chart Series component can be easily created.
  10.   TArrowSeries derives from standard TPointSeries.
  11.   Each point in the series is drawn like an Arrow.
  12.   Each arrow has initial and end X,Y values that are used to draw the
  13.   Arrow with its corresponding screen size.
  14.  
  15.   Inherits all functionality from TPointSeries and
  16.   its ancestor (TCustomSeries).
  17. }
  18. Uses WinTypes,Classes,Graphics,Chart,Series,TeEngine; { <-- needed units }
  19.  
  20. Type
  21.   TArrowSeries=class(TPointSeries)
  22.   private
  23.     FEndXValues : TChartValueList;
  24.     FEndYValues : TChartValueList; { <-- Arrows end X,Y values }
  25.     Procedure SetEndXValues(Value:TChartValueList);
  26.     Procedure SetEndYValues(Value:TChartValueList);
  27.     Function GetArrowHeight:Integer;
  28.     procedure SetArrowHeight(Value:Integer);
  29.     Function GetArrowWidth:Integer;
  30.     procedure SetArrowWidth(Value:Integer);
  31.     Function GetStartXValues:TChartValueList;
  32.     Procedure SetStartXValues(Value:TChartValueList);
  33.     Function GetStartYValues:TChartValueList;
  34.     Procedure SetStartYValues(Value:TChartValueList);
  35.   protected
  36.     procedure DrawValue(ValueIndex:Longint); override; { <-- main draw method }
  37.   public
  38.     Constructor Create(AOwner: TComponent); override;
  39.     Function AddArrow(Const X0,Y0,X1,Y1:Double; Const ALabel:String; AColor:TColor):Longint;
  40.     Procedure FillSampleValues(NumValues:Longint); override; { <-- to add random arrow values }
  41.     Function GetEditorClass:String; override;
  42.     Function IsValidSourceOf(Value:TChartSeries):Boolean; override;
  43.     Function MaxXValue:Double; override;
  44.     Function MinXValue:Double; override;
  45.     Function MaxYValue:Double; override;
  46.     Function MinYValue:Double; override;
  47.     Procedure PrepareForGallery(IsEnabled:Boolean); override;
  48.   published
  49.     property ArrowHeight:Integer read GetArrowHeight write SetArrowHeight stored False;
  50.     property ArrowWidth:Integer read GetArrowWidth write SetArrowWidth stored False;
  51.     property EndXValues:TChartValueList read FEndXValues write SetEndXValues;
  52.     property EndYValues:TChartValueList read FEndYValues write SetEndYValues;
  53.     property StartXValues:TChartValueList read GetStartXValues write SetStartXValues;
  54.     property StartYValues:TChartValueList read GetStartYValues write SetStartYValues;
  55.   end;
  56.  
  57. implementation
  58.  
  59. Uses SysUtils,TeeProcs,TeeConst,TeCanvas;
  60.  
  61. { TArrowSeries }
  62. Constructor TArrowSeries.Create(AOwner: TComponent);
  63. Begin
  64.   inherited Create(AOwner);
  65.   CalcVisiblePoints:=False;
  66.   XValues.DateTime:=True;
  67.   FEndXValues :=TChartValueList.Create(Self,TeeMsg_ValuesArrowEndX);
  68.   FEndXValues.DateTime:=True;
  69.   FEndYValues :=TChartValueList.Create(Self,TeeMsg_ValuesArrowEndY);
  70.   Pointer.InflateMargins:=False;
  71.   Marks.Frame.Visible:=False;
  72.   Marks.Transparent:=True;
  73. end;
  74.  
  75. Procedure TArrowSeries.SetEndXValues(Value:TChartValueList);
  76. Begin
  77.   SetChartValueList(FEndXValues,Value); { standard method }
  78. end;
  79.  
  80. Procedure TArrowSeries.SetEndYValues(Value:TChartValueList);
  81. Begin
  82.   SetChartValueList(FEndYValues,Value); { standard method }
  83. end;
  84.  
  85. { Helper method, special to Arrow series }
  86. Function TArrowSeries.AddArrow( Const X0,Y0,X1,Y1:Double;
  87.                                 Const ALabel:String; AColor:TColor):Longint;
  88. Begin
  89.   result:=AddXY(X0,Y0,ALabel,AColor); { standard add X,Y }
  90.   FEndXValues.TempValue:=X1;
  91.   FEndYValues.TempValue:=Y1;
  92.   AddValue(result);
  93. end;
  94.  
  95. Procedure TArrowSeries.FillSampleValues(NumValues:Longint);
  96. Var tmpDifX : Longint;
  97.     tmpDifY : Longint;
  98.     t       : Longint;
  99.     tmpX0   : Double;
  100.     tmpY0   : Double;
  101.     tmpX    : Double;
  102.     tmpY    : Double;
  103.     StepX   : Double;
  104.     MinY    : Double;
  105.     DifY    : Double;
  106. Begin
  107.   Clear;
  108.   CalcRandomBounds(NumValues,tmpX,StepX,tmpY,MinY,DifY);
  109.   tmpDifY:=Round(DifY);
  110.   for t:=1 to NumValues do { some sample values to see something in design mode }
  111.   Begin
  112.     tmpDifX :=Round(StepX*NumValues);
  113.     tmpX0   :=tmpX+Random(tmpDifX);
  114.     tmpY0   :=MinY+Random(tmpDifY);
  115.     AddArrow( tmpX0,tmpY0,
  116.               tmpX0+Random(tmpDifX),   { X1 }
  117.               tmpY0+Random(tmpDifY)   { Y1 }
  118.               {$IFNDEF D4},'', clTeeColor{$ENDIF});
  119.   end;
  120.   RefreshSeries;
  121. end;
  122.  
  123. Function TArrowSeries.GetArrowWidth:Integer;
  124. Begin
  125.   result:=Pointer.HorizSize;
  126. end;
  127.  
  128. Function TArrowSeries.GetArrowHeight:Integer;
  129. Begin
  130.   result:=Pointer.VertSize;
  131. end;
  132.  
  133. procedure TArrowSeries.SetArrowWidth(Value:Integer);
  134. Begin
  135.   Pointer.HorizSize:=Value;
  136. End;
  137.  
  138. procedure TArrowSeries.SetArrowHeight(Value:Integer);
  139. Begin
  140.   Pointer.VertSize:=Value;
  141. End;
  142.  
  143. procedure TArrowSeries.DrawValue(ValueIndex:Longint);
  144. Var p0       : TPoint;
  145.     p1       : TPoint;
  146.     tmpColor : TColor;
  147. Begin  { This overrided method is the main paint for Arrow points. }
  148.   P0.x:=CalcXPos(ValueIndex);
  149.   P0.y:=CalcYPos(ValueIndex);
  150.   P1.x:=CalcXPosValue(FEndXValues.Value[ValueIndex]);
  151.   P1.y:=CalcYPosValue(FEndYValues.Value[ValueIndex]);
  152.   tmpColor:=ValueColor[ValueIndex];
  153.   With ParentChart do
  154.   begin
  155.     if View3D then Pointer.PrepareCanvas(tmpColor)
  156.     else
  157.     With Canvas do
  158.     begin
  159.       Pen.Assign(Pointer.Pen);
  160.       Pen.Color:=tmpColor;
  161.     end;
  162.     Canvas.Arrow(View3D,P0,P1,ArrowWidth,ArrowHeight,MiddleZ);
  163.   end;
  164. end;
  165.  
  166. Function TArrowSeries.MaxXValue:Double;
  167. Begin
  168.   result:=MaxDouble(inherited MaxXValue,FEndXValues.MaxValue);
  169. end;
  170.  
  171. Function TArrowSeries.MinXValue:Double;
  172. Begin
  173.   result:=MinDouble(inherited MinXValue,FEndXValues.MinValue);
  174. end;
  175.  
  176. Function TArrowSeries.MaxYValue:Double;
  177. Begin
  178.   result:=MaxDouble(inherited MaxYValue,FEndYValues.MaxValue);
  179. end;
  180.  
  181. Function TArrowSeries.MinYValue:Double;
  182. Begin
  183.   result:=MinDouble(inherited MinYValue,FEndYValues.MinValue);
  184. end;
  185.  
  186. Function TArrowSeries.GetEditorClass:String;
  187. Begin
  188.   result:='TArrowSeriesEditor'; { <-- dont translate ! }
  189. end;
  190.  
  191. Function TArrowSeries.GetStartXValues:TChartValueList;
  192. Begin
  193.   result:=XValues;
  194. End;
  195.  
  196. Procedure TArrowSeries.SetStartXValues(Value:TChartValueList);
  197. Begin
  198.   SetXValues(Value);
  199. End;
  200.  
  201. Function TArrowSeries.GetStartYValues:TChartValueList;
  202. Begin
  203.   result:=YValues;
  204. End;
  205.  
  206. Procedure TArrowSeries.SetStartYValues(Value:TChartValueList);
  207. Begin
  208.   SetYValues(Value);
  209. End;
  210.  
  211. Procedure TArrowSeries.PrepareForGallery(IsEnabled:Boolean);
  212. Begin
  213.   inherited PrepareForGallery(IsEnabled);
  214.   FillSampleValues(3);
  215.   ArrowWidth :=12;
  216.   ArrowHeight:=12;
  217.   if not IsEnabled then SeriesColor:=clGray;
  218. end;
  219.  
  220. Function TArrowSeries.IsValidSourceOf(Value:TChartSeries):Boolean;
  221. begin
  222.   result:=Value is TArrowSeries;
  223. end;
  224.  
  225. initialization
  226.   RegisterTeeSeries(TArrowSeries,TeeMsg_GalleryArrow,TeeMsg_GalleryStandard,2);
  227. end.
  228.